package com.glowdayz.common;

import java.io.InputStream;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.glowdayz.common.HttpHandler.FileInfo;
import android.util.Log;

public class XmlParser {
	
	static String TAG = XmlParser.class.getSimpleName();
	
	public static XmlParser current = null;
	
	public static XmlParser getInstance() {
		if (current == null) {
			current = new XmlParser();
		}
		return current;
	}
	
	public static void freeInstance() {
		if (current != null) {
			current = null;
		}
	}
	
	public XmlPullParser getParserMulti(String url, String encoding, FileInfo[] files) {
		
		Log.d(TAG,"=========== method start >> getParser");
		
		Log.d(TAG,"XML파서 생성 >> " + url);
		
		XmlPullParser parser = null;

		/** 통신처리 */
		// 접속 후 결과를 리턴받기
		InputStream is = null;
		
		if (files == null) {
			is= HttpHandler.getInstance().get(url, encoding);
		} else {
			is= HttpHandler.getInstance().postMulti(url, encoding, files);
		}

		// 결과가 null이라면 통신에 실패한 상황이므로...
		if (is == null) {
			Log.e(TAG,"XmlParser >> 통신에러 발생함");
			// 강제 종료
			return null;
		}
		
		/*byte[] buffer = null;
		try {
			buffer = new byte[is.available()];
			is.read(buffer);
			Log.d("RESULT", new String(buffer, "utf-8"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}*/
		

		/************ XML 데이터 처리 시작 ***********/
		// XML파서 생성기
		XmlPullParserFactory factory = null;

		// 객체 생성
		try {
			factory = XmlPullParserFactory.newInstance();
			parser = factory.newPullParser();

			/** 읽은 내용(InputStream)을 parser에게 전달 파일의
			 * 인코딩 타입을 지정해 주어야 함 */
			parser.setInput(is, encoding);
		} catch (XmlPullParserException e) {
			Log.e(TAG,"XmlParser >> 파서 생성 실패 - " + e.toString());
			Log.e(TAG,e.getLocalizedMessage());
			Log.e(TAG,e.getStackTrace().toString());
		}
		
		Log.d(TAG,"=========== method end >> getParser");

		return parser;
	}
	
	public XmlPullParser getParserSingle(String url, String encoding, FileInfo file) {
		
		Log.d(TAG,"=========== method start >> getParser");
		
		Log.d(TAG,"XML파서 생성 >> " + url);
		
		XmlPullParser parser = null;

		/** 통신처리 */
		// 접속 후 결과를 리턴받기
		InputStream is = null;
		
		if (file == null) {
			is= HttpHandler.getInstance().get(url, encoding);
		} else {
			is= HttpHandler.getInstance().postSingle(url, encoding, file);
		}
		
		// 결과가 null이라면 통신에 실패한 상황이므로...
		if (is == null) {
			Log.e(TAG,"XmlParser >> 통신에러 발생함");
			// 강제 종료
			return null;
		}
		
		/*byte[] buffer = null;
		try {
			buffer = new byte[is.available()];
			is.read(buffer);
			Log.d("RESULT", new String(buffer, "utf-8"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}*/
		
		
		/************ XML 데이터 처리 시작 ***********/
		// XML파서 생성기
		XmlPullParserFactory factory = null;
		
		// 객체 생성
		try {
			factory = XmlPullParserFactory.newInstance();
			parser = factory.newPullParser();
			
			/** 읽은 내용(InputStream)을 parser에게 전달 파일의
			 * 인코딩 타입을 지정해 주어야 함 */
			parser.setInput(is, encoding);
		} catch (XmlPullParserException e) {
			Log.e(TAG,"XmlParser >> 파서 생성 실패 - " + e.toString());
			Log.e(TAG,e.getLocalizedMessage());
			Log.e(TAG,e.getStackTrace().toString());
		}
		
		Log.d(TAG,"=========== method end >> getParser");

		return parser;
	}
	
	public XmlPullParser getParser(String url, String encoding) {
		return this.getParserSingle(url, encoding, null);
	}
	
	public XmlPullParser getParserMulti(String url, FileInfo[] files) {
		return this.getParserMulti(url, "utf-8", files);
	}
	
	public XmlPullParser getParserSingle(String url, FileInfo file) {
		return this.getParserSingle(url, "utf-8", file);
	}
	
	public XmlPullParser getParser(String url) {
		return this.getParser(url, "utf-8");
	}
}



